package coint.btc.util;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;



public class JWTUtil {

//	// 过期时间30分钟
//	private static final long EXPIRE_TIME = 60 * 60 * 1000;
//
//	private final static String base64Secret = "MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY=";
//
//	public static String createToken(DaozhaAdmin user) {
//		// 签发时间
//		Date iatDate = new Date();
//		// 过期时间
//		Date expiresDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//
//		Map<String, Object> map = new HashMap<>();
//		map.put("alg", "HS256");
//		map.put("typ", "JWT");
//		try {
//			return JWT.create().withHeader(map).withClaim("ID", user.getUserId()).withClaim("NAME", user.getNickname())
//					.withExpiresAt(expiresDate).withIssuedAt(iatDate).sign(Algorithm.HMAC256(base64Secret));
//		} catch (IllegalArgumentException e) {
//			e.printStackTrace();
//		} catch (JWTCreationException e) {
//			e.printStackTrace();
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	public static Map<String, Claim> verifyToken(String token) {
//		JWTVerifier build = null;
//		try {
//			build = JWT.require(Algorithm.HMAC256(base64Secret)).build();
//		} catch (IllegalArgumentException | UnsupportedEncodingException e) {
//			throw new NotLoginException();
//		}
//		DecodedJWT verify = build.verify(token);
//		Map<String, Claim> claims = verify.getClaims();
//		return claims;
//	}
//
//	/***********************************************************************/
//
//	/**
//	 * 校验token是否正确
//	 * 
//	 * @param token
//	 * @return 是否正确
//	 */
//	public static boolean verify(String token) {
//		try {
//			Algorithm algorithm = Algorithm.HMAC256(base64Secret);
//			JWTVerifier verifier = JWT.require(algorithm).build();
//			verifier.verify(token);
//			return true;
//		} catch (Exception exception) {
//			exception.printStackTrace();
//			return false;
//		}
//	}
//
//	/**
//	 * 获得token中的信息无需secret解密也能获得
//	 * 
//	 * @return token中包含的用户名
//	 */
//	public static DaozhaAdmin getUser(String token) {
//		try {
//			DecodedJWT jwt = JWT.decode(token);
//			Map<String, Claim> claims = jwt.getClaims();	
//			System.out.println("---------userId-----"+claims.get("userId").asInt());
//			System.out.println("---------name-------"+claims.get("name").asString());
//			System.out.println("---------password-----"+claims.get("password").asString());
//			System.out.println("---------nickname-----"+claims.get("nickname").asString());
//			System.out.println("---------state--------"+claims.get("state").asInt());
//			System.out.println("---------phone--------"+claims.get("phone").asString());
//			System.out.println("---------jueseId------"+claims.get("jueseId").asInt());
//			System.out.println("---------remark-------"+claims.get("remark").asString());
//			System.out.println("---------sex----------"+claims.get("sex").asInt());
//			DaozhaAdmin user=new DaozhaAdmin(claims.get("userId").asInt(),claims.get("name").asString(),claims.get("password").asString(),
//					claims.get("nickname").asString(),claims.get("state").asInt(),claims.get("phone").asString(),claims.get("jueseId").asInt(),claims.get("remark").asString(),claims.get("sex").asInt());
//			return user;
//		} catch (JWTDecodeException e) {
//			return null;
//		}
//	}
//
//	/**
//	 * 生成签名 5min过期
//	 * @param user
//	 * @return
//	 */
//	public static String sign(DaozhaAdmin user) {
//		try {
//			Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//			Algorithm algorithm = Algorithm.HMAC256(base64Secret);
//			// 附带username信息
//			return JWT.create().withClaim("userId", user.getUserId())
//					.withClaim("name",user.getName())
//					.withClaim("password", user.getPassword())
//					.withClaim("nickname", user.getNickname())
//					.withClaim("state", user.getState())
//					.withClaim("phone", user.getPhone())
//					.withClaim("jueseId", user.getJueseId())
//					.withClaim("remark", user.getRemark())
//					.withClaim("sex", user.getSex()).withExpiresAt(date).sign(algorithm);
//		} catch (UnsupportedEncodingException e) {
//			return null;
//		}
//	}
//	
//	/**
//	 * 获得token中的信息无需secret解密也能获得
//	 * 
//	 * @return token中包含的用户名
//	 */
//	public static DaozhaAdmin getUserLogin(String token) {
//		try {
//			DecodedJWT jwt = JWT.decode(token);
//			Map<String, Claim> claims = jwt.getClaims();
//			DaozhaAdmin user = new DaozhaAdmin(0, claims.get("name").asString(), claims.get("password").asString(), null, 
//					null, null, null, null,null);
//			return user;
//		} catch (JWTDecodeException e) {
//			return null;
//		}
//	}
//
//	/**
//	 * 生成签名 5min过期
//	 * @param user
//	 * @return
//	 */
//	public static String signLogin(DaozhaAdmin user) {
//		try {
//			Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//			Algorithm algorithm = Algorithm.HMAC256(base64Secret);
//			// 附带username信息
//			return JWT.create()
//					.withClaim("userName", user.getName())
//					.withClaim("userPassword", user.getPassword()).withExpiresAt(date).sign(algorithm);
//		} catch (UnsupportedEncodingException e) {
//			return null;
//		}
//	}
//	
//	public static void main(String[] args) {
//		String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyQ29tbXVuaXR5SWQiOjEsInVzZXJQYXNzd29yZCI6ImUxMGFkYzM5NDliYTU5YWJiZTU2ZTA1N2YyMGY4ODNlIiwidXNlckNvbW11bml0eU5hbWUiOiLkuK3ov5znpL7ljLoiLCJ1c2VyU3RhdGUiOjIsInVzZXJOaWNrbmFtZSI6Iui2hee6p-euoeeQhuWRmCIsImlkIjoyLCJ1c2VyVHlwZSI6MiwidXNlck5hbWUiOiJhZG1pbl8iLCJleHAiOjE1Mjg4ODQ3NTB9.knpKGWXWiRP1VlYIVHCE-LlyqFpBkv1-BTacN69rMWw";
//		System.out.println(verify(token));
//	}
}
